// 观赏樱花
// 给定一个背包的容量t，一共有n种货物，并且给定每种货物的信息
// 花费(cost)、价值(val)、数量(cnt)
// 如果cnt == 0，代表这种货物可以无限选择
// 如果cnt > 0，那么cnt代表这种货物的数量
// 挑选货物的总容量在不超过t的情况下，返回能得到的最大价值
// 背包容量不超过1000，每一种货物的花费都>0
// 测试链接 : https://www.luogu.com.cn/problem/P1833
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 100001;
const int MAXW = 1001;
int v[MAXN], w[MAXN];
int dp[MAXW];
int hour1, minute1, hour2, minute2;
int n, t, m;

// 完全背包转化为多重背包
// 再把多重背包通过二进制分组转化为01背包
int compute()
{
    for(int i = 1; i <= m; ++i)
    {
        for(int j = t; j >= w[i]; --j)
        {
            dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
        }
    }
    return dp[t];
}

int main()
{
    scanf("%d:%d%d:%d%d", &hour1, &minute1, &hour2, &minute2, &n);
    // 计算背包容量
    t = (hour2 - hour1) * 60 + minute2 - minute1;
    for(int i = 1, weight, value, cnt; i <= n; ++i)
    {
        scanf("%d%d%d", &weight, &value, &cnt);
        if(cnt == 0) cnt = 1000;
        // 二进制分组
        for(int k = 1; k <= cnt; k <<= 1)
        {
            v[++m] = k * value;
            w[m] = k * weight;
            cnt -= k;
        }
        if(cnt > 0)
        {
            v[++m] = cnt * value;
            w[m] = cnt * weight;
        }
    }
    printf("%d\n", compute());

    return 0;
}